home *** CD-ROM | disk | FTP | other *** search
/ Amiga Tools 5 / Amiga Tools 5.iso / tools / developer-tools / c-tools / c_examples / picturedt / reqtools.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  1996-06-15  |  11.3 KB  |  366 lines

  1. //////////////////////////////////////////////////////////////////////////////
  2. // ReqTools.cpp - AFrame v1.0 © 1996 Synthetic Input
  3. //
  4. // ReqTools C++ Object utilizing reqtools.library version 38.1296
  5. // by Nico François.  ReqTools is © Nico François
  6. // 
  7. //
  8. // Deryk B Robosson
  9. // Jeffry A Worth
  10. // January 20, 1996
  11. //////////////////////////////////////////////////////////////////////////////
  12.  
  13. //////////////////////////////////////////////////////////////////////////////
  14. // INCLUDES
  15. #include "AFRAME:include/reqtools.hpp"
  16.  
  17. extern struct ExecBase *SysBase;
  18. extern struct ReqToolsBase *ReqToolsBase;
  19.  
  20. #ifndef __AFREQTOOLS_DEFTAGS__
  21. #define __AFREQTOOLS_DEFTAGS__
  22.  
  23. ULONG def_screentags[] = { RTSC_Flags,SCREQF_DEPTHGAD|SCREQF_SIZEGADS|SCREQF_AUTOSCROLLGAD|SCREQF_OVERSCANGAD,TAG_END } ;
  24. ULONG def_filetags[] = { RTFI_FilterFunc,TAG_END };
  25. ULONG def_multifiletags[] = { RTFI_FilterFunc,RTFI_Flags,FREQF_MULTISELECT,TAG_END };
  26. ULONG def_dirtags[] = { RTFI_Flags,FREQF_NOFILES,TAG_END };
  27. ULONG def_volumetags[] = { RTFI_FilterFunc,RTFI_VolumeRequest,0,TAG_END };
  28. ULONG def_fonttags[] = { RTFO_FilterFunc,TAG_END };
  29. ULONG def_palettetags[] = { TAG_END };
  30. ULONG def_getlong[] = { RTGL_ShowDefault,FALSE,RTGL_Min,0,RTGL_Max,999999,TAG_END };
  31. ULONG def_getstring[] = { RTGS_GadFmt,(ULONG)"_Ok|_Cancel",RTGS_BackFill,FALSE,RTGS_Flags,GSREQF_CENTERTEXT|GSREQF_HIGHLIGHTTEXT,TAG_MORE,RT_Underscore,'_',TAG_END };
  32.  
  33. #endif //__AFREQTOOLS_DEFTAGS__
  34.  
  35. //////////////////////////////////////////////////////////////////////////////
  36. //
  37.  
  38. AFReqTools::AFReqTools()
  39.     :color(0),
  40. //    filename[0](NULL),
  41.     m_filelist(NULL),
  42.     m_screenmoderequester(NULL),
  43.     m_filerequester(NULL),
  44.     m_fontrequester(NULL)
  45. {
  46.     filename[0]=NULL;
  47.  
  48.     if(!ReqToolsBase)
  49.         if(!(ReqToolsBase=(struct ReqToolsBase *)OpenLibrary((UBYTE*)REQTOOLSNAME,(ULONG)REQTOOLSVERSION)))
  50.             printf("Unable to open reqtools.library version %ld\n",REQTOOLSVERSION);
  51. }
  52.  
  53. AFReqTools::~AFReqTools()
  54. {
  55.     DestroyObject();
  56.     if(ReqToolsBase) CloseLibrary((struct Library*)ReqToolsBase),ReqToolsBase=NULL;
  57. }
  58.  
  59. void AFReqTools::DestroyObject()
  60. {
  61.     if(m_filelist)  rtFreeFileList(m_filelist);
  62.     if(m_screenmoderequester) rtFreeRequest(m_screenmoderequester);
  63.     if(m_filerequester) rtFreeRequest(m_filerequester);
  64.     if(m_fontrequester) rtFreeRequest(m_fontrequester);
  65.  
  66.     delete m_filelist;
  67.     delete m_screenmoderequester;
  68.     delete m_filerequester;
  69.     delete m_fontrequester;
  70.  
  71.     color=0;
  72.     filename[0]=NULL;
  73.     m_filelist=NULL;
  74.     m_screenmoderequester=NULL;
  75.     m_filerequester=NULL;
  76.     m_fontrequester=NULL;
  77. }
  78.  
  79. void AFReqTools::Create()
  80. {
  81. }
  82.  
  83. BOOL AFReqTools::EZRequest(char *text, char *gadfmt)
  84. {
  85.     return ::rtEZRequest(text,gadfmt,NULL,NULL);
  86. }
  87.  
  88. BOOL AFReqTools::EZRequestA(char *text, char *gadfmt, struct rtReqInfo *reqinfo, ULONG taglist[])
  89. {
  90.     return ::rtEZRequest(text,gadfmt,reqinfo,(struct TagItem *)taglist);
  91. }
  92.  
  93. BOOL AFReqTools::ScreenMode()
  94. {
  95.     if(SysBase->LibNode.lib_Version<37) {
  96.         rtEZRequestTags("ScreenMode requesters require\n Kickstart 2.0 or higher.\n","_Ok",NULL,NULL,RT_Underscore,'_',TAG_END);
  97.         return FALSE;
  98.     } else {
  99.         if(m_screenmoderequester=(struct rtScreenModeRequester*)rtAllocRequestA(RT_SCREENMODEREQ,NULL)) {
  100.             if(!rtScreenModeRequest(m_screenmoderequester,(char *)"Select a Screen Mode",(ULONG)RTSC_Flags,
  101.                                     (ULONG)(SCREQF_DEPTHGAD|SCREQF_SIZEGADS|SCREQF_AUTOSCROLLGAD|SCREQF_OVERSCANGAD),(ULONG)TAG_END))
  102.                 return FALSE;
  103.             else return TRUE;
  104.         } else { 
  105.             rtEZRequest((char *)"Out of memory!",(char *)"Ok!",NULL,NULL);
  106.             return FALSE;
  107.           }
  108.     }
  109. }
  110.  
  111. BOOL AFReqTools::ScreenModeA(ULONG taglist[])
  112. {
  113.     if(SysBase->LibNode.lib_Version<37) {
  114.         rtEZRequestTags("ScreenMode requesters require\n Kickstart 2.0 or higher.\n","_Ok",NULL,NULL,RT_Underscore,'_',TAG_END);
  115.         return FALSE;
  116.     } else {
  117.         if(m_screenmoderequester=(struct rtScreenModeRequester*)rtAllocRequestA(RT_SCREENMODEREQ,NULL)) {
  118.             if(!rtScreenModeRequestA(m_screenmoderequester,(char *)"Select a Screen Mode",(struct TagItem *)taglist))
  119.                 return FALSE;
  120.             else return TRUE;
  121.  
  122.         } else { 
  123.             rtEZRequest((char *)"Out of memory!",(char *)"Ok!",NULL,NULL);
  124.             return FALSE;
  125.           }
  126.     }
  127. }
  128.  
  129. BOOL AFReqTools::FileRequest()
  130. {
  131.     if(m_filerequester=(struct rtFileRequester*)rtAllocRequestA(RT_FILEREQ,NULL)) {
  132.         m_filterhook.h_Entry=(ULONG(*)())file_filterfunc;
  133.         if(!rtFileRequest(m_filerequester,filename,"Select a File",RTFI_FilterFunc,&m_filterhook,TAG_END))
  134.             return FALSE;
  135.         else return TRUE;
  136.     } else {
  137.         rtEZRequest((char *)"Out of memory!",(char *)"Ok!",NULL,NULL);
  138.         return FALSE;
  139.       }
  140. }
  141.  
  142. BOOL AFReqTools::FileRequestA(ULONG taglist[])
  143. {
  144.     if(m_filerequester=(struct rtFileRequester*)rtAllocRequestA(RT_FILEREQ,NULL)) {
  145.         m_filterhook.h_Entry=(ULONG(*)())file_filterfunc;
  146.         if(!rtFileRequestA(m_filerequester,filename,"Select a File",(struct TagItem *)taglist))
  147.             return FALSE;
  148.         else return TRUE;
  149.     } else {
  150.         rtEZRequest((char *)"Out of memory!",(char *)"Ok!",NULL,NULL);
  151.         return FALSE;
  152.       }
  153. }
  154.  
  155. BOOL AFReqTools::FilesRequest()
  156. {
  157.     if(m_filerequester=(struct rtFileRequester*)rtAllocRequestA(RT_FILEREQ,NULL)) {
  158.         m_filterhook.h_Entry=(ULONG(*)())file_filterfunc;
  159.         m_filelist=(struct rtFileList*)rtFileRequest(m_filerequester,filename,"Select Files",RTFI_FilterFunc,&m_filterhook,RTFI_Flags,FREQF_MULTISELECT,TAG_END);
  160.         if(!m_filelist)
  161.             return FALSE;
  162.         else return TRUE;
  163.     } else {
  164.         rtEZRequest((char *)"Out of memory!",(char *)"Ok!",NULL,NULL);
  165.         return FALSE;
  166.       }
  167. }
  168.  
  169. BOOL AFReqTools::FilesRequestA(ULONG taglist[])
  170. {
  171.     if(m_filerequester=(struct rtFileRequester*)rtAllocRequestA(RT_FILEREQ,NULL)) {
  172.         m_filterhook.h_Entry=(ULONG(*)())file_filterfunc;
  173.         m_filelist=(struct rtFileList*)rtFileRequestA(m_filerequester,filename,"Select Files",(struct TagItem *)taglist);
  174.         if(!m_filelist)
  175.             return FALSE;
  176.         else return TRUE;
  177.     } else {
  178.         rtEZRequest((char *)"Out of memory!",(char *)"Ok!",NULL,NULL);
  179.         return FALSE;
  180.       }
  181. }
  182.  
  183. BOOL AFReqTools::DirRequest()
  184. {
  185.     if(m_filerequester=(struct rtFileRequester*)rtAllocRequestA(RT_FILEREQ,NULL)) {
  186.         if(!rtFileRequest(m_filerequester,filename,"Select a Directory",RTFI_Flags,FREQF_NOFILES,TAG_END))
  187.             return FALSE;
  188.         else return TRUE;
  189.     } else {
  190.         rtEZRequest((char *)"Out of memory!",(char *)"Ok!",NULL,NULL);
  191.         return FALSE;
  192.       }
  193. }
  194.  
  195. BOOL AFReqTools::VolumeRequest()
  196. {
  197.     if(m_filerequester=(struct rtFileRequester*)rtAllocRequestA(RT_FILEREQ,NULL)) {
  198.         m_volume_filterhook.h_Entry=(ULONG (*)())vol_filterfunc;
  199.         if(!rtFileRequest(m_filerequester,filename,"Select a Volume",RTFI_FilterFunc,&m_volume_filterhook,RTFI_VolumeRequest,0,TAG_END))
  200.             return FALSE;
  201.         else return TRUE;
  202.     } else {
  203.         rtEZRequest((char *)"Out of memory!",(char *)"Ok!",NULL,NULL);
  204.         return FALSE;
  205.       }
  206. }
  207.  
  208. BOOL AFReqTools::FontRequest()
  209. {
  210.     if(m_fontrequester=(struct rtFontRequester*)rtAllocRequestA(RT_FONTREQ,NULL)) {
  211.         m_fontrequester->Flags=FREQF_STYLE|FREQF_COLORFONTS;
  212.         m_font_filterhook.h_Entry=(ULONG (*)())font_filterfunc;
  213.         if(!rtFontRequest(m_fontrequester,"Select a Font",RTFO_FilterFunc,&m_font_filterhook,TAG_END))
  214.             return FALSE;
  215.         else return TRUE;
  216.     } else {
  217.         rtEZRequest((char *)"Out of memory!",(char *)"Ok!",NULL,NULL);
  218.         return FALSE;
  219.       }
  220. }
  221.  
  222. BOOL AFReqTools::FontRequestA(ULONG taglist[])
  223. {
  224.     if(m_fontrequester=(struct rtFontRequester*)rtAllocRequestA(RT_FONTREQ,NULL)) {
  225.         m_fontrequester->Flags=FREQF_STYLE|FREQF_COLORFONTS;
  226.         m_font_filterhook.h_Entry=(ULONG (*)())font_filterfunc;
  227.         if(!rtFontRequestA(m_fontrequester,"Select a Font",(struct TagItem *)taglist))
  228.             return FALSE;
  229.         else return TRUE;
  230.     } else {
  231.         rtEZRequest((char *)"Out of memory!",(char *)"Ok!",NULL,NULL);
  232.         return FALSE;
  233.       }
  234. }
  235.  
  236. BOOL AFReqTools::PaletteRequest()
  237. {
  238.     color=rtPaletteRequest("Change Palette",NULL,TAG_END);
  239.  
  240.     if(color==-1)
  241.         return FALSE;
  242.     else return TRUE;
  243. }
  244.  
  245. BOOL AFReqTools::PaletteRequestA(ULONG taglist[])
  246. {
  247.     color=rtPaletteRequestA("Change Palette",m_reqinfo,(struct TagItem *)taglist);
  248.  
  249.     if(color==-1)
  250.         return FALSE;
  251.     else return TRUE;
  252. }
  253.  
  254. void AFReqTools::ScreenToFront(struct Screen *screen)
  255. {
  256.     rtScreenToFrontSafely(screen);
  257. }
  258.  
  259. void AFReqTools::SetWaitPointer(struct Window *win)
  260. {
  261.     rtSetWaitPointer(win);
  262. }
  263.  
  264. BOOL AFReqTools::LockWindow(struct Window *win)
  265. {
  266.     m_windowlock=(APTR)rtLockWindow(win);
  267.     return TRUE;
  268. }
  269.  
  270. void AFReqTools::UnlockWindow(struct Window *win, APTR winlock)
  271. {
  272.     rtUnlockWindow(win,winlock);
  273. }
  274.  
  275. ULONG AFReqTools::GetLong(char *title, struct rtReqInfo *reqinfo)
  276. {
  277.     ULONG ret;
  278.     if(!(ret=rtGetLong((ULONG *)&longvar,title,reqinfo,RTGL_ShowDefault,FALSE,RTGL_Min,0,RTGL_Max,999999,TAG_END)))
  279.         return FALSE;
  280.     else return ret;
  281. }
  282.  
  283. ULONG AFReqTools::GetLongA(char *title, struct rtReqInfo *reqinfo, ULONG taglist[])
  284. {
  285.     ULONG ret;
  286.     if(!(ret=rtGetLongA((ULONG *)&longvar,title,reqinfo,(struct TagItem *)taglist)))
  287.         return FALSE;
  288.     else return ret;
  289. }
  290.  
  291. ULONG AFReqTools::GetString(UBYTE *buffer, ULONG maxchars, char *title, struct rtReqInfo *reqinfo)
  292. {
  293.     ULONG ret;
  294.  
  295.     if(!(ret=rtGetString(buffer, maxchars, title, reqinfo, RTGS_GadFmt, "_Ok|_Cancel",RTGS_BackFill,FALSE,RTGS_Flags,GSREQF_CENTERTEXT|GSREQF_HIGHLIGHTTEXT,TAG_MORE,RT_Underscore,'_',TAG_END)))
  296.         return FALSE;
  297.     else return ret;
  298. }
  299.  
  300. ULONG AFReqTools::GetStringA(UBYTE *buffer, ULONG maxchars, char *title, struct rtReqInfo *reqinfo, ULONG taglist[])
  301. {
  302.     ULONG ret;
  303.  
  304.     if(!(ret=rtGetStringA(buffer, maxchars, title, reqinfo, (struct TagItem *)taglist)))
  305.         return FALSE;
  306.     else return ret;
  307. }
  308.  
  309. ULONG AFReqTools::GetVScreenSize(struct Screen *screen, ULONG *widthptr, ULONG *heightptr)
  310. {
  311.     ULONG spacing;
  312.  
  313.     if(!(spacing=rtGetVScreenSize(screen,widthptr,heightptr)))
  314.         return FALSE;
  315.     else return spacing;
  316. }
  317.  
  318.  
  319. BOOL __asm __saveds file_filterfunc (register __a0 struct Hook *filterhook,
  320.        register __a2 struct rtFileRequester *req,
  321.        register __a1 struct FileInfoBlock *fib)
  322. {
  323.     // examine fib to decide if you want this file in the requester
  324.     return TRUE;
  325. }
  326.  
  327. BOOL __asm __saveds vol_filterfunc (
  328.     REG __a0 struct Hook *hook,
  329.     REG __a2 struct rtFileRequester *filereq,
  330.     REG __a1 struct rtVolumeEntry *volentry
  331.     )
  332. {
  333.     // examine volentry to decide which volumes you want in this requester
  334.     return TRUE;
  335. }
  336.  
  337. BOOL __asm __saveds font_filterfunc (
  338.     REG __a0 struct Hook *hook,
  339.     REG __a2 struct rtFontRequester *fontreq,
  340.     REG __a1 struct TextAttr *textattr
  341.     )
  342. {
  343.     // examine textattr to decide which fonts you want in this requester
  344.     return TRUE;
  345. }
  346.  
  347. AFString* AFReqTools::GetFileName()
  348. {
  349.     AFString temp;
  350.  
  351.     if(m_filerequester->Dir) {
  352.         temp=m_filerequester->Dir;
  353.         if(temp[temp.length()-1] != ':') {
  354.             temp += "/";
  355.             temp += filename;
  356.             return (AFString*)temp;
  357.         } else {
  358.             temp += filename;
  359.             return (AFString*)temp;
  360.           }
  361.     } else {
  362.         temp = filename;
  363.         return (AFString*)temp;
  364.       }
  365. }
  366.